// 文件路径: src/main/java/com/chixing/service/impl/UserCouponServiceImpl.java

package com.chixing.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.chixing.entity.Coupon;
import com.chixing.entity.UserCoupon;
import com.chixing.entity.vo.CouponDetailVO;
import com.chixing.mapper.CouponMapper;
import com.chixing.mapper.UserCouponMapper;
import com.chixing.service.IUserCouponService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chixing.util.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

import static com.baomidou.mybatisplus.extension.toolkit.Db.list;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author liwenjing
 * @since 2025-10-07
 */
@Service
public class UserCouponServiceImpl extends ServiceImpl<UserCouponMapper, UserCoupon> implements IUserCouponService {

    @Autowired
    private UserCouponMapper userCouponMapper;
    @Autowired
    private CouponMapper couponMapper;


    //用户领取优惠券
    @Override
    public Result saveCoupon(UserCoupon userCoupon) {
        // 先根据 coupon_id 查 coupon 表
        Coupon coupon = couponMapper.selectById(userCoupon.getCouponId());
        if (coupon == null) {
            return Result.getFail("优惠券不存在");
        }


        userCoupon.setStatues(1);
        userCoupon.setReceiveTime(LocalDateTime.now());
        userCoupon.setUpdateTime(LocalDateTime.now());
        userCoupon.setVersion(1);
        userCoupon.setEndTime(coupon.getEndTime());


        System.out.println(userCoupon);
        int rows = userCouponMapper.insert(userCoupon);
        if (rows > 0)
            return Result.getSuccess(userCoupon);
        return Result.getFail(userCoupon);
    }

    //查看我领取的所有的优惠券 `【Mycoupon】`按照发布时间的降序显示，并显示状态
    // 1. 下订单业务中，下拉列表显示 所有的有效的优惠券
    //2.  用户自己查看优惠券，[未使用 | 已使用 | 已过期]
    //状态（1有效/0无效/2退回可用）
    @Override
    public Result getMyAllCoupons(Integer userId, Integer usercouponStatus) {
        List<CouponDetailVO> couponDetailVOS = userCouponMapper.selectUserAllCoupons(userId, usercouponStatus);



        if (couponDetailVOS != null && couponDetailVOS.size() > 0)
            return Result.getSuccess(couponDetailVOS);
        return Result.getFail(null);
    }

    @Override
    public Result getById(Integer usercouponId) {
        UserCoupon userCoupon = userCouponMapper.selectById(usercouponId);
        if (userCoupon != null)
            return Result.getSuccess(userCoupon);
        return Result.getFail(usercouponId);
    }

    @Override
    public Result updateStatus(Integer usercouponId, Integer usercouponStatus) {
        UpdateWrapper<UserCoupon> wrapper = new UpdateWrapper<>();
        wrapper.eq("user_coupon_id", usercouponId).set("statues", usercouponStatus);
        int rows = userCouponMapper.update(wrapper);
        if (rows > 0)
            return Result.updateSuccess(usercouponId);
        return Result.updateFail(usercouponId);
    }
    @Override
    public UserCoupon getUserCouponById(Integer userCouponId) {
        return super.getById(userCouponId);

    }
    @Override
    public boolean updateUserCoupon(UserCoupon userCoupon) {
        return updateById(userCoupon);
    }


    }

